import re
import nltk
from nltk.tokenize import sent_tokenize

# 尝试下载nltk必要的资源
try:
    nltk.data.find('tokenizers/punkt')
except LookupError:
    nltk.download('punkt')

def split_text_into_scenes(text, max_scenes=4):
    """将文本分割成多个场景
    
    Args:
        text: 要分割的文本
        max_scenes: 最大场景数量，默认为4
    
    Returns:
        list: 场景列表
    """
    if not text:
        return []
    
    # 使用nltk进行句子分割
    sentences = sent_tokenize(text)
    
    if not sentences:
        return []
    
    # 如果句子数量较少，直接返回
    if len(sentences) <= max_scenes:
        return [' '.join(sentences)]
    
    # 计算每个场景的句子数量
    sentences_per_scene = len(sentences) // max_scenes
    remainder = len(sentences) % max_scenes
    
    scenes = []
    start_idx = 0
    
    # 分割句子为场景
    for i in range(max_scenes):
        # 分配句子数量，处理余数
        end_idx = start_idx + sentences_per_scene + (1 if i < remainder else 0)
        
        # 提取场景文本
        scene_sentences = sentences[start_idx:end_idx]
        scene_text = ' '.join(scene_sentences)
        
        # 添加到场景列表
        scenes.append(scene_text)
        
        # 更新起始索引
        start_idx = end_idx
    
    return scenes

def extract_keywords(text, max_keywords=5):
    """从文本中提取关键词
    
    Args:
        text: 要提取关键词的文本
        max_keywords: 最大关键词数量，默认为5
    
    Returns:
        list: 关键词列表
    """
    if not text:
        return []
    
    # 简单的关键词提取方法
    # 在实际应用中，可以使用更复杂的NLP方法，如TF-IDF或TextRank
    
    # 移除标点符号和转换为小写
    text = re.sub(r'[^\w\s]', '', text).lower()
    
    # 分割文本为单词
    words = text.split()
    
    # 过滤常见的停用词（简单版本）
    stop_words = set([
        '的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'
    ])
    
    # 过滤停用词
    filtered_words = [word for word in words if word not in stop_words and len(word) > 1]
    
    # 计算词频
    word_freq = {}
    for word in filtered_words:
        if word in word_freq:
            word_freq[word] += 1
        else:
            word_freq[word] = 1
    
    # 按词频排序
    sorted_words = sorted(word_freq.items(), key=lambda x: x[1], reverse=True)
    
    # 返回前max_keywords个关键词
    return [word for word, freq in sorted_words[:max_keywords]]

def clean_text(text):
    """清理文本，去除多余的空格和换行符
    
    Args:
        text: 要清理的文本
    
    Returns:
        str: 清理后的文本
    """
    if not text:
        return ""
    
    # 去除多余的空格和换行符
    text = re.sub(r'\s+', ' ', text)
    
    # 去除首尾的空格
    text = text.strip()
    
    return text

def count_words(text):
    """计算文本的词数
    
    Args:
        text: 要计算词数的文本
    
    Returns:
        int: 词数
    """
    if not text:
        return 0
    
    # 清理文本
    text = clean_text(text)
    
    # 分割文本为单词并计算数量
    words = text.split()
    
    return len(words)